package com.jt.provider.interceptor;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.time.LocalTime;


/**
 * 遵循spring mvc规范,自定义拦截器,对要访问controller方法的请求进行拦截
 * 然后可以基于业务对请求进行一个预处理.例如进行时间访问控制 （类似12306上的订票业务）
 */
@Slf4j
@Component
public class TimeHandlerInterceptor implements HandlerInterceptor {

    /**
     * penHandle 方法会在目标controller方法执行之前执行
     * @param request
     * @param response
     * @param handler  这个handler对象 对应了你的目标controller
     * @return 这个返回结果决定了此请求是否放行. false表示不放行
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler)
                             throws Exception {
        System.out.println("===preHandle===");
        LocalTime now = LocalTime.now();
        int hour = now.getHour();
        if (hour<9 || hour>18){
            //设置响应数据编码
            response.setCharacterEncoding("utf-8");
            //告诉浏览器向它响应的内容类型,以及编码方式
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
            out.print("<h1>请在9-18之间访问</h1>");
            out.flush();
            out.close();
        }
        return true; //true表示放行
    }
}
